#ifndef __SEQLIST_H_
#define __SEQLIST_H_

typedef struct seq_list {
	int nmemb;    // 实际存储成员个数
	int size;     // 每个成员大小
	void *arr;    // 数组
	int capacity; // 可存储成员个数
} seq_t;

typedef int (*cmp_t)(const void *data, const void *key);

typedef void (*print_t)(const void *data);

int seqlist_init(seq_t **li_ptr, int capacity, int size);

int seqlist_is_full(const seq_t *li);

int seqlist_insert_tail(seq_t *li, const void *data);

int seqlist_insert_head(seq_t *li, const void *data);

int seqlist_insert_sort(seq_t *li, const void *data, cmp_t cmp);

void *seqlist_find(const seq_t *li, const void *key, cmp_t cmp);

int seqlist_delete(seq_t *li, const void *key, cmp_t cmp);

int seqlist_fetch(seq_t *li, const void *key, cmp_t cmp, void *data);

void seqlist_travel(const seq_t *li, print_t print);

void seqlist_destroy(seq_t **li_ptr);

#endif
